package cn.zhuo.knowledge.util.lombok.model;

import lombok.AllArgsConstructor;

/**
 * <p>
 *
 * @author z2huo
 */
//@RequiredArgsConstructor
//@NoArgsConstructor
@AllArgsConstructor
public class UserByConstructor {

    private Long id;

    private String name;

    private int age;

    private final String code;

}

/*
@NoArgsConstructor 和没有被初始化的 final 属性不能同时存在，会编译报错
因为 final 属性如果在声明时没有被初始化，则需要在构造器中进行初始化，不能有方法体为空的无参构造器

如果声明时未初始化的 final 属性，则 @RequiredArgsConstructor 注解会生成一个有参构造方法，如下：
public UserByConstructor(String code) {
    this.code = code;
}

如果有声明时初始化的 final 属性，则 @RequiredArgsConstructor 注解不会生成有参构造方法，也不会生成无参构造器，如下：
public class UserByConstructor {
    private Long id;
    private String name;
    private int age;
    private final String code = "";
}
上面代码中的构造方法为默认的构造方法。

但是如果此时再加上 @NoArgsConstructor 注解，会编译报错，错误如下：
java: 已在类 cn.zhuo.knowledge.util.lombok.model.UserByConstructor中定义了构造器 UserByConstructor()
因为已经有默认的隐式的无参构造方法

 */